// #include <stdio.h>
// #include <stdlib.h>
// #include "windows.h"
//
// // **定义二叉树节点**
// typedef struct TreeNode {
//     int data;
//     struct TreeNode* left;
//     struct TreeNode* right;
// } TreeNode;
//
// // **创建新节点**
// TreeNode* CreateNode(int data) {
//     TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
//     node->data = data;
//     node->left = node->right = NULL;
//     return node;
// }
//
// // **先根遍历（前序遍历）**
// void PreOrder(TreeNode* root) {
//     if (root == NULL) return;
//     printf("%d ", root->data); // 访问根节点
//     PreOrder(root->left);      // 遍历左子树
//     PreOrder(root->right);     // 遍历右子树
// }
//
// // **后根遍历（后序遍历）**
// void PostOrder(TreeNode* root) {
//     if (root == NULL) return;
//     PostOrder(root->left);     // 遍历左子树
//     PostOrder(root->right);    // 遍历右子树
//     printf("%d ", root->data); // 访问根节点
// }
//
// // **层次遍历（BFS 使用队列）**
// typedef struct QueueNode {
//     TreeNode* data;
//     struct QueueNode* next;
// } QueueNode;
//
// typedef struct {
//     QueueNode* front;
//     QueueNode* rear;
// } Queue;
//
// // **初始化队列**
// void InitQueue(Queue* q) {
//     q->front = q->rear = NULL;
// }
//
// // **队列是否为空**
// int IsEmpty(Queue* q) {
//     return q->front == NULL;
// }
//
// // **入队**
// void EnQueue(Queue* q, TreeNode* node) {
//     QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
//     newNode->data = node;
//     newNode->next = NULL;
//     if (q->rear == NULL) {
//         q->front = q->rear = newNode;
//     } else {
//         q->rear->next = newNode;
//         q->rear = newNode;
//     }
// }
//
// // **出队**
// TreeNode* DeQueue(Queue* q) {
//     if (IsEmpty(q)) return NULL;
//     QueueNode* temp = q->front;
//     TreeNode* node = temp->data;
//     q->front = temp->next;
//     if (q->front == NULL) q->rear = NULL;
//     free(temp);
//     return node;
// }
//
// // **层次遍历**
// void LevelOrder(TreeNode* root) {
//     if (root == NULL) return;
//     Queue q;
//     InitQueue(&q);
//     EnQueue(&q, root);
//
//     while (!IsEmpty(&q)) {
//         TreeNode* node = DeQueue(&q);
//         printf("%d ", node->data);
//         if (node->left) EnQueue(&q, node->left);
//         if (node->right) EnQueue(&q, node->right);
//     }
// }
//
// // **测试代码**
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     // 构造二叉树
//     TreeNode* root = CreateNode(1);
//     root->left = CreateNode(2);
//     root->right = CreateNode(3);
//     root->left->left = CreateNode(4);
//     root->left->right = CreateNode(5);
//     root->right->left = CreateNode(6);
//     root->right->right = CreateNode(7);
//
//     // 遍历测试
//     printf("先根遍历（前序遍历）: ");
//     PreOrder(root);
//     printf("\n");
//
//     printf("后根遍历（后序遍历）: ");
//     PostOrder(root);
//     printf("\n");
//
//     printf("层次遍历: ");
//     LevelOrder(root);
//     printf("\n");
//
//     return 0;
// }
